package com.powergame.model;

import com.jme3.math.Vector3f;
import com.jme3.scene.Spatial;
import java.util.ArrayList;
import java.util.List;

/**
 * Piece.java
 * 
 * Modélise une pièce de jeu
 *
 * @author ToF
 */
public class Piece {

    /** Sur quel est secteur est la pièce */
    private Secteur position = null;
    
    /** identifiant unique de la pièce */
    private String id = null;
    
    /** Soldat ? avion ? etc.. */
    private TypePiece type = null;
    
    /** A qui appartient la pièce */
    private Equipe equipe = null;
    
    /** le modele 3d de la pièce sur le plateau */
    private Spatial spatial = null;
    
    /** Le chemin de déplacement de la piece */
    private List<Secteur> chemin = null;
    
    public Piece(Secteur position, String id, TypePiece type, Equipe equipe){
        this.position = position;
        this.id = id;
        this.type = type;
        this.equipe = equipe;
    }

    public int getDeplacement() {
        return getType().getDeplacement();
    }

    public Equipe getEquipe() {
        return equipe;
    }

    public void setEquipe(Equipe equipe) {
        this.equipe = equipe;
    }

    public String getId() {
        return id;
    }

    public void setId(String id) {
        this.id = id;
    }

    public Secteur getPosition() {
        return position;
    }

    public void setPosition(Secteur position) {
        
        // Retire la pièce de son secteur actuel
        if(this.position != null){
            this.position.getPieces().remove(this);
        }
        
        this.position = position;
        
        if(!position.getPieces().contains(this)){
            position.getPieces().add(this);
        }
        
        if(!position.getType().equals(TypeSecteur.SECTEUR_RESERVE)){
            // TODO Déplace le spatial
            Vector3f pos = PowerGameUtils.getPosition(position);
            spatial.setLocalTranslation(pos);
        }
    }

    public int getPower() {
        return getType().getPower();
    }

    public TypePiece getType() {
        return type;
    }

    public void setType(TypePiece type) {
        this.type = type;
    }

    public Spatial getSpatial() {
        return spatial;
    }

    public void setSpatial(Spatial spatial) {
        this.spatial = spatial;
    }

    public List<Secteur> getChemin() {
        if(chemin == null){
            chemin = new ArrayList<Secteur>();
        }
        return chemin;
    }

    public void setChemin(List<Secteur> chemin) {
        this.chemin = chemin;
    }

    public void moveTo(Plateau plateau, Secteur arrive){
        // Calcule le chemin
        setChemin(PowerGameUtils.findPath(type, plateau, position, arrive));
    }
}
